#ifndef XMLFUNC_H
#define XMLFUNC_H
/*
 * XMLFunc类里面主要存储各种对xml文件操作的静态方法（使用地方不多且使用地方不在同一类中，如果使用普通类可能会更加复杂一些）
 */

#include <QString>
#include <QFile>
#include <QtXml/QDomDocument>
#include <QtXml/QDomAttr>
#include <QXmlStreamWriter>
#include <QCoreApplication>

#include "DebugPrint/myDebugPrint.h"
#include "ENUM/enum.h"

class XMLFunc
{
public:
    static QString ConfigXmlPath;       // 用于存储config.xml存储的位置。

    /**
     @interpret     初始化对应配置文件xml的初始内容
     @param         filePath: 对应文件路径
     @return        true-成功;false-失败;
     */
    static bool ConfigXmlFileInit(const QString& filePath);

    /**
     @interpret    读取对应xml文件内容
     @param        filePath: 已打开的对应xml文件路径;document: 输出型参数(用于返回读取到的xml内容)
     @return       true-成功;false-失败;
     */
    static bool ReadXmlData(const QString& filePath, QDomDocument* document);

    /**
     @interpret     读取对应<key>元素的文本内容
     @param         document: 需要查找<key>所在的对应根节点元素; key: 需要查找的<key>元素
     @return        成功返回对应文本内容字符串，失败返回空字符串;
     */
    static QString ReadElementValue(const QDomDocument* document, const QString& key);

    /**
     @interpret     修改对应xml内容中对应的属性的文本内容
     @param         document: 从对应xml文件中获取到的QDomDocument; Key: 需要修改的属性字段名; text: 修改后的文本内容
     @return        true-成功;false-失败;
     */
    static bool XmlDataModify(QDomDocument* document, const QString& Key, const QString& text);

    /**
     @interpret     保存对应QDomDocument至对应xml文件中
     @param         document: 需要保存的QDomDocument指针; filePath: 对应xml文件的路径
     @return        true-成功;false-失败;
     */
    static bool saveDocumentToXml(QDomDocument* document, const QString& filePath);

    /**
     @interpret     修改对应xml内容中对应的属性的文本内容(相较于XmlDataModify方法该方法仅需要传入对应xml文件路径)
     @param         filePath: 对应xml文件路径; Key: 需要修改的属性字段名; text: 修改后的文本内容
     @return        true-成功;false-失败;
     */
    static bool xmlValueModify(const QString& filePath, const QString& Key, const QString& text);

    /**
     @interpret     用于初始化Config.Xml文件的地址
     @param         无
     @return        无
     */
    static void xmlPathInit();

    /**
     @interpret     用于获取对应xml文件中的key键对应的数据
     @param         filePath: 对应xml文件位置; key: 需要查找key键
     @return        成功返回对应文本内容字符串，失败返回空字符串;
     */
    static QString xmlReadKeyValue(const QString& filePath, const QString& key);
};

#endif // XMLFUNC_H
